/**
 * @file QWF_Ctrl.h
 * @brief QWF框架核心控制头文件（集中管理跨模块控制相关的头文件包含、条件编译及通用声明）
 * @author WeiFan Qiu (qiuweifan0523@faxmail.com)
 * @version 1.0
 * @date 2025-08-07
 * 
 * @copyright Copyright (c) 2025 邱伟凡
 * 
 * @par 修改日志:
 * - 2025-08-07: 初始版本，定义框架控制模块基础包含及条件编译逻辑
 * 
 * @bug 待解决问题: 暂无已知问题
 */
#ifndef QWF_CTRL_H
#define QWF_CTRL_H

// 专控文件包含（自定义控制逻辑）
#include "QWF_Custom_Ctrl.h"	// 自定义控制逻辑头文件（用户特定功能实现）
#include "QWF_Cmd.h"			// 命令协议定义头文件（通信指令解析）

#ifndef Circuit_Boards
	#error "Undefine 'Circuit_Boards'"  // 未定义电路板类型时报错
#endif

/**
 * @brief 非云台电路板时包含底盘相关头文件
 * @note 若当前电路板类型不是云台（Gimbal_Circuit_Boards），则包含底盘控制、裁判系统、UI及电源控制头文件
 */
#if Circuit_Boards!=Head_Circuit_Boards/*******Chassis_Include*******/
#include "chassis.h" 		// 底盘控制头文件（底盘运动学计算）
#include "judge.h"			// 裁判系统通信头文件（接收比赛状态）
#include "UI.h"				// UI显示头文件（人机交互界面）
#include "power_ctrl.h"		// 电源管理头文件（功率限制控制）
#endif

/**
 * @brief 非底盘电路板时包含云台相关头文件
 * @note 若当前电路板类型不是底盘（Chassis_Circuit_Boards），则包含云台控制、视觉及遥控器初始化声明
 */
#if Circuit_Boards!=Chassis_Circuit_Boards/*******Gimbal_Include*******/
#include "head.h" 	// 云台电机控制头文件（俯仰/偏航角度控制）
#include "vision.h"			// 视觉通信头文件（接收视觉识别数据）
#endif

/**********通用头文件包含（跨模块公共依赖）**************/
#include "hi229.h"			// HI229传感器驱动头文件（姿态传感器）
#include "dm_imu.h"			// DM_IMU驱动头文件（惯性测量单元）
#include "judge.h"			// 裁判系统（重复包含，确保兼容性）
#include "ctrl.h"			 	// 遥控器控制头文件（接收遥控数据）
#include "pid.h"		 	// PID控制头文件（闭环控制算法）
#include "communicate.h"	// 通信协议头文件（CAN/串口通信逻辑）
#include "state.h"			// 状态机管理头文件（系统状态切换）
#include "Filter.h"			// 滤波器头文件（数据平滑处理）

/**********QWF框架专用头文件包含（核心功能模块）***************/
#include "QWF_Math.h"		// 自定义数学库头文件（矩阵/向量运算）
#include "QWF_Type.h"		// 自定义数据类型头文件（结构体/枚举定义）
#include "QWF_Include.h"	// 框架通用包含头文件（限幅宏/枚举类型）
#include "QWF_Can.h"		// CAN通信驱动头文件（电机控制通信）
#include "QWF_Usart.h"		// 串口通信驱动头文件（传感器通信）

/**********标准库及第三方库文件包含（基础功能支持）************/ 
//#include "wwdg.h"			// 窗口看门狗头文件（可选使能）
#include "stdbool.h"		// 布尔类型头文件（1bit布尔值定义）
#include "stdio.h"			// 标准输入输出头文件（printf函数）
#include "string.h"			// 字符串操作头文件（memcpy等函数）
#include "stdint.h"			// 标准整数类型头文件（int8_t/uint32_t等）
#include "arm_math.h"		// ARM数学库头文件（浮点运算优化）
#include "math.h"			// 标准数学库头文件（sin/cos等函数）
#include "main.h"			// HAL库主头文件（STM32 HAL初始化）
#include "freertos.h"		// FreeRTOS内核头文件（操作系统支持）
#include "task.h"			// FreeRTOS任务头文件（任务管理/延时）

/*******中断回调函数外部声明（供HAL库调用）***************/
#define my_bsp_init	  Can_Init();\
  Motor_Init();\
  judge_init();\
  hi2xx_Init();
#endif
